【小ネタ】CloudFormationで文字列内に変数を入れる。(YAML版)
【小ネタ】CloudFormationで文字列内に変数を入れる。(YAML版)
こんにちは、岩本です。
CloudFormationを利用する際に、ある特定の値を変数として利用するケースは多いと思いますが、
ある文字列中に変数を挿入したい場合があるかと思います。
今回は、CloudFormationでIAM Policyを設定する際を例に、
ARN内に記載するリージョン
とAWS ID
を変数として利用する場合を記載します。
サンプル
AWSTemplateFormatVersion: '2010-09-09' Description: TEST-Policy Resources: TestPolicy: Properties: PolicyDocument: Statement: - Action: lambda:InvokeFunction Effect: Allow Resource: !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:hogehoge Version: '2012-10-17' PolicyName: AWSLambdaTestPolicy Roles: - test-hogehoge-role Type: AWS::IAM::Policy
解説
やりたい事
- 事前に設定した変数を元に
Resource: arn:aws:lambda:[AWSのリージョン]:[AWSのアカウントID]:function:hogehoge
と入力したい。
やった事
Resource:
以後に!Sub
関数を記載し、必要な箇所に${AWS::Region}
${AWS::AccountId}
と記載した。!Sub
とは?- CloudFormationに組み込まれている関数
Fn::Sub
の短縮記載で、ある値の入力文字列にある変数の代わりとなります。
- CloudFormationに組み込まれている関数
${AWS::Region}
${AWS::AccountId}
とは?- CloudFormationで事前に定義されたパラメータで、それぞれCloudFormationの実行リージョン・アカウントを取得します。
指定の変数を利用したい場合
Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: AWS Account Parameters: - AWSAccountID Parameters: AWSAccountID: ConstraintDescription: AWS ID is Only Number with 12digit Default: 123456789012 MinLength: 12 MaxLength: 12 AllowedPattern: "[0-9]*" Description: Please enter Gambit System AWS ID! Type: String Resources: TestPolicy: Properties: PolicyDocument: Statement: - Action: lambda:InvokeFunction Effect: Allow Resource: !Sub arn:aws:lambda:${AWS::Region}:${AWSAccountID}:function:hogehoge Version: '2012-10-17' PolicyName: AWSLambdaTestPolicy Roles: - test-hogehoge-role Type: AWS::IAM::Policy
${AWS::AccountId}
を${AWSAccountID}
と変更しました。${AWSAccountID}
は、Parameters
で指定した値となり、上記のように任意の変数を利用する事も可能です。